package org.example.blog.service;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;
import reactor.core.publisher.Flux;

import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;

@AiService(
        wiringMode = EXPLICIT, //手动装配
        chatModel = "openAiChatModel", //指定模型
        streamingChatModel = "openAiStreamingChatModel", //指定流式模型
//        chatMemory = "chatMemory", //指定记忆
        /*
        指定记忆提供器  相比较于chatMemory，chatMemoryProvider可以指定多个记忆，实现会话隔离
         */
        chatMemoryProvider = "chatMemoryProvider",
        tools = "calculatortools" //指定工具

)
public interface AiChatService {
    //用于聊天的方法
//    String chat(String message);
//    @SystemMessage("今天的日期是{{current_date}}")  //current_date获取当前时间
//    @SystemMessage(fromResource = "prompt.txt")  //从prompt.txt文件中获取提示信息

    @SystemMessage(fromResource = "prompt.txt")
    Flux<String> chat(@MemoryId long memoryId, @UserMessage String message);
    //流式调用
//    @SystemMessage("你只能回答是或不是，如果无法回答，就回答不知道")
//    @UserMessage("请回答已经保存好了")
//    @UserMessage(fromResource = "prompt.txt")    //用户提示词形参必须为一个
    Flux<String> streamChat(String message);

//    @UserMessage("Extract information about a person from {{it}}")
//    Person chatPerson(String message);

}
